#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>

int main(void){
  int fd = open("io.txt",O_CREAT|O_RDWR,0644);
  if(fd==-1){
    perror("open");
    exit(EXIT_FAILURE);
  }
  char buffer[100];
  pid_t son_pid = fork();
  if(son_pid==-1){
    perror("fork");
    exit(EXIT_FAILURE);
  }
  // 判断是子进程在执行，还是父进程
  if(son_pid==0){
    sprintf(buffer,"子进程：我写入了%d到此一游\r\n",getpid());
    printf("子进程%d准备写入数据。。。\n",getpid());
  }else{
    sleep(1); // 主进程睡眠1秒让子进程先写
    sprintf(buffer,"父进程：我写入了%d到此一游\r\n",getpid());
    printf("主进程%d准备写入数据。。。\n",getpid());
  }
  // 写入数据到文件
  ssize_t res = write(fd,buffer,strlen(buffer));
  if(res==-1){
    perror("write");
    close(fd);
    exit(EXIT_FAILURE);
  }
  // 写入成功后，关闭文件
  // 问题：子进程先操作结束后，直接关闭文件，此次后来的父进程还能操作吗？
  close(fd); 
  if(son_pid==0){
    printf("子进程写入完毕,并释放文件描述符\n");
  }else{
    printf("父进程写入完毕,并释放文件描述符\n");
  }

  return 0;
}
